import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase representa a un apuntador a botones.
 * @author Miguel Martinez Aguilar
 * @version 04 de abril de 2013
 */
public class Aboton extends Apuntador
{
    // Declaracion de variables de instancia
    private Boton bot;// es un objeto Boton.
    private GreenfootSound clic;// es un sonido de clic.
    
    /**
     * Constructor de Aboton
     */
    public Aboton() 
    {
        super();
        clic = new GreenfootSound("press.wav");
    }
    
    /**
     * Este metodo ubica a este objeto apuntador con el cursor.
     */
    public void act() 
    {
        super.cambiaCoordenadas();
        if(activo)this.ubicaBoton();
        this.clickAqui();
    }
    
    /**
     * Este es el metodo que checa si el puntero se encuentra con un boton.
     */
    public void ubicaBoton()
    {
        if(super.ubicaObjeto(true)){
            if(bot != (Boton)alguien){
                if(bot!=null)bot.resalta(false);
            }
            bot=(Boton)alguien;
            bot.resalta(true);
        }
        else if(bot != null)bot.resalta(false);
    }
    
    /**
     * Este es el metodo que verifica si se ha realizado un click con el mouse.
     */
    public void clickAqui()
    {
        if(this.clickValido()){
            clic.play();
            bot = (Boton)alguien;
            bot.resalta(true);
            bot.ejecuta();//el boton realiza lo que tiene que hacer
        }
    }
    
    /**
     * Este es el metodo que verifica si se ha realizado un click valido. <p>
     * Regresa un boleano que indica si el clic realizado es valido.
     */
    public boolean clickValido()
    {
        boolean val = false;
        if(Greenfoot.mouseClicked(null)){
            activo = true;
            if(this.ubicaObjeto(true))val = true;
        }
        else{
            if(Greenfoot.mousePressed(null)){
                if(this.ubicaObjeto(true)){
                    bot = (Boton)alguien;
                    bot.presiona();
                    activo = false;
                }
            }
        }
        return val;
    }
}
